import pandas as pd
from datetime import datetime,timedelta
import os
from utils import read_config,get_directory
import tushare as ts


#设置你的token，登录tushare在个人用户中心里拷贝


# 读取配置信息
config = read_config()
ts.set_token(config.get('tushare','token'))
pro = ts.pro_api()
_base_directory = config.get('settings','base_file')
_daily_directory = config.get('settings','monitor_file')
monitor_daily_directory = get_directory(_base_directory,_daily_directory)
file_name = datetime.now().strftime('%Y-%m-%d')+'.cvs'

# 按时间获取数据
def load_data(datetime = datetime.now(),day_num = 5):
    file_name = datetime.strftime('%Y-%m-%d')+'.csv'
    file_path = os.path.join(monitor_daily_directory, file_name)
    # 检查文件是否存在
    if os.path.exists(file_path):
        # 从CSV文件加载数据
        df = pd.read_csv(file_path, parse_dates=['trade_date'])
        # 按日期排序
        df.sort_values('trade_date', inplace=True)
        return df
    else:
        # 获取当前日期
        current_date = datetime.today()
        # 初始化一个列表来存储历史数据
        historical_data = pd.DataFrame()
        # 初始化一个计数器来记录找到的交易日数量
        trading_days_count = 0
        # 从当前日期开始逐步往前推，直到找到足够的交易日数据
        while trading_days_count < day_num:
            # 使用 yfinance 获取特定日期的数据
            data = pro.daily(trade_date = current_date.strftime('%Y%m%d'))
            # 如果数据不为空，则说明这一天是交易日
            if not data.empty:
                historical_data = pd.concat([historical_data, data], ignore_index=True)
                trading_days_count += 1
            # 往前推一天
            current_date -= timedelta(days=1)
        # 将数据按交易日期和股票代码进行排序
        historical_data.sort_values(by=['trade_date', 'ts_code'], inplace=True)
        # 重置索引
        historical_data.reset_index(drop=True, inplace=True)
        # 将数据保存到 CSV 文件中
        historical_data.to_csv(file_path, index=False)
        historical_data['trade_date'] = pd.to_datetime(historical_data['trade_date'])
        return historical_data


if __name__ == '__main__':
    print(load_data())